// #include <stdio.h>
// #include <stdlib.h>
// #include <Windows.h>
//
// // 节点结构
// typedef struct Node {
//     int data;
//     struct Node* next;
// } Node;
//
// // 链表结构
// typedef struct LinkedList {
//     Node* head;  // 头结点
// } LinkedList;
//
// // 创建链表并初始化
// LinkedList* create_list() {
//     LinkedList* list = (LinkedList*)malloc(sizeof(LinkedList));
//     list->head = (Node*)malloc(sizeof(Node)); // 创建头结点
//     list->head->next = NULL;  // 初始化头结点的下一个指针
//     return list;
// }
//
// // 判断链表是否为空
// int is_empty(LinkedList* list) {
//     return list->head->next == NULL;
// }
//
// // 头插法插入
// void insert_at_head(LinkedList* list, int data) {
//     Node* new_node = (Node*)malloc(sizeof(Node));
//     new_node->data = data;
//     new_node->next = list->head->next; // 新节点指向原来的第一个节点
//     list->head->next = new_node; // 头结点指向新节点
// }
//
// // 尾插法插入
// void insert_at_tail(LinkedList* list, int data) {
//     Node* new_node = (Node*)malloc(sizeof(Node));
//     new_node->data = data;
//     new_node->next = NULL; // 新节点的下一个指针指向 NULL
//
//     Node* current = list->head;
//     while (current->next != NULL) {
//         current = current->next; // 找到最后一个节点
//     }
//     current->next = new_node; // 将新节点插入到链表末尾
// }
//
// // 按位序插入
// void insert(LinkedList* list, int position, int data) {
//     if (position < 1) {
//         printf("位置不合法\n");
//         return;
//     }
//
//     Node* new_node = (Node*)malloc(sizeof(Node));
//     new_node->data = data;
//     Node* current = list->head;
//     int count = 0;
//
//     // 找到插入位置的前一个节点
//     while (count < position - 1 && current->next != NULL) {
//         current = current->next;
//         count++;
//     }
//
//     if (count == position - 1) {
//         new_node->next = current->next;
//         current->next = new_node;
//     } else {
//         printf("位置超出链表范围\n");
//         free(new_node);  // 释放未使用的节点
//     }
// }
//
// // 按位删除
// void delete(LinkedList* list, int position) {
//     if (position < 1 || is_empty(list)) {
//         printf("位置不合法或链表为空\n");
//         return;
//     }
//
//     Node* current = list->head;
//     int count = 0;
//
//     // 找到要删除节点的前一个节点
//     while (count < position - 1 && current->next != NULL) {
//         current = current->next;
//         count++;
//     }
//
//     if (current->next != NULL) {
//         Node* to_delete = current->next;
//         current->next = current->next->next;
//         free(to_delete);  // 释放被删除的节点
//     } else {
//         printf("位置超出链表范围\n");
//     }
// }
//
// // 按位查找
// int find_by_index(LinkedList* list, int position) {
//     if (position < 1 || is_empty(list)) {
//         return -1;  // 返回 -1 表示未找到
//     }
//
//     Node* current = list->head->next;
//     int count = 1;
//
//     while (current != NULL && count < position) {
//         current = current->next;
//         count++;
//     }
//
//     return (current != NULL) ? current->data : -1;  // 返回 -1 表示未找到
// }
//
// // 按值查找
// Node* find_by_value(LinkedList* list, int value) {
//     Node* current = list->head->next;
//     while (current != NULL) {
//         if (current->data == value) {
//             return current;
//         }
//         current = current->next;
//     }
//     return NULL;  // 未找到返回 NULL
// }
//
// // 显示链表内容
// void display(LinkedList* list) {
//     Node* current = list->head->next;
//     printf("链表内容: ");
//     while (current != NULL) {
//         printf("%d ", current->data);
//         current = current->next;
//     }
//     printf("\n");
// }
//
// // 释放链表内存
// void free_list(LinkedList* list) {
//     Node* current = list->head;
//     Node* next_node;
//     while (current != NULL) {
//         next_node = current->next;
//         free(current);
//         current = next_node;
//     }
// }
//
// //倒数第k个值存在？
// int FindReverseK(LinkedList* L,int k) {
//     if(L==NULL&&k<=0) {
//         printf("值非法或链表不存在\n");
//         exit(1);
//     }
//     //表长
//     int length=0;
//     Node* p=L->head->next;
//     while (p!=NULL) {
//         length++;
//         p=p->next;
//     }
//     if(k>length) {
//         printf("超出长度\n");
//         return -1;
//     }
//     //开始
//     Node* ppp=L->head->next;
//     for(int i=0;i<length-k;i++) {
//         ppp=ppp->next;
//     }
//     if(ppp->data) {
//         printf("查到的值为:%d\n",ppp->data);
//         return 1;
//     }else {
//         return 0;
//     }
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     LinkedList* L=create_list();
//     insert_at_tail(L,1);
//     insert_at_tail(L,2);
//     insert_at_tail(L,3);
//     insert_at_tail(L,4);
//     insert_at_tail(L,5);
//     int result=FindReverseK(L,5);
//     if(result==1) {
//         printf("成功\n");
//     }else{
//         printf("不存在\n");
//     }
//     free_list(L);
//     return 0;
// }